$LOAD_PATH.unshift File.join(File.dirname(__FILE__),'../..','ext_pr1/lib')
require 'ext_pr1_v4'
require 'Aufgabe_2'

# Konstanten
def untere_temperatur_schwelle() 18 end
def obere_temperatur_schwelle() 25 end

# Function checks if temperature is too low
# zu_kalt? :: (temp)
#   INT => BOOL
#
# Examples
#   zu_kalt?(17) = > true
#   zu_kalt?(18) = > false
#   zu_kalt?(19) = > false
#   
#   zu_kalt?() = > ERR
#   zu_kalt?("a") = > ERR
#   zu_kalt?(true) = > ERR
#   zu_kalt?(17.0) = > ERR

def zu_kalt?(temp)
  check_pre(temp.int?)
  #temp < untere_temperatur_schwelle ? true : false
  temp < untere_temperatur_schwelle
end

# Function checks if temperature is too high
# zu_warm? :: (temp)
#   INT => BOOL
#
# Examples
#   zu_warm?(24) = > true
#   zu_warm?(25) = > false
#   zu_warm?(26) = > false
#   
#   zu_warm?() = > ERR
#   zu_warm?("a") = > ERR
#   zu_warm?(true) = > ERR
#   zu_warm?(26.0) = > ERR

def zu_warm?(temp)
  check_pre(temp.int?)
  #temp > obere_temperatur_schwelle ? true : false
  temp > obere_temperatur_schwelle
end

# Function checks if temperature is not too high and not too low
# angenehm? :: (temp)
#   INT => BOOL
#
# Examples
#   angenehm?(17) = > false
#   angenehm?(18) = > true
#   angenehm?(20) = > true
#   angenehm?(25) = > true
#   angenehm?(26) = > false
#
#   angenehm?() = > ERR
#   angenehm?("a") = > ERR
#   angenehm?(true)  = > ERR
#   angenehm?(20.0)  = > ERR

def angenehm?(temp)
  check_pre(temp.int?)
  # Kondional-Operator kann weggelassen werden, da ein Ausdruck direkt true oder false liefert
  #not zu_kalt?(temp) and not zu_warm?(temp) 
  #not ( zu_kalt?(temp) or zu_warm?(temp)) 
  #(zu_kalt?(temp) or zu_warm?(temp)) ? false : true
  #(zu_kalt?(temp)) ? false : (zu_warm?(temp)) ? false : true 
  within?(temp,untere_temperatur_schwelle,obere_temperatur_schwelle)
end

# Function checks if temperature is too high or too low
# angenehm? :: (temp)
#   INT => BOOL
#
# Examples
#   angenehm?(17) = > true
#   angenehm?(18) = > false
#   angenehm?(20) = > false
#   angenehm?(25) = > false
#   angenehm?(26) = > true
#
#   angenehm?() = > ERR
#   angenehm?("a") = > ERR
#   angenehm?(true)  = > ERR
#   angenehm?(20.0)  = > ERR

def unangenehm?(temp)
  check_pre(temp.int?)
  not angenehm?(temp)
end